//package com.qianfan.qfcall.network.viewmodel
//
//import android.widget.Toast
//import androidx.lifecycle.ViewModel
//import com.sum.network.error.ApiException
//import com.sum.network.error.ExceptionHandler
//import com.wxq.workpad.utils.ApplicationUtils
//import kotlinx.coroutines.Dispatchers
//import kotlinx.coroutines.flow.MutableStateFlow
//import kotlinx.coroutines.launch
//import kotlinx.coroutines.withContext
//
//open class BaseViewModel : ViewModel() {
//    val isShowLoading:MutableStateFlow<Boolean?> = MutableStateFlow(null)
//
//
//// 页面通用 基础属性
//    /**
//     *  同时调用多个接口的时候
//     */
//    fun launchUI( responseBlock: suspend () -> Unit,   errorBlock:suspend (ApiException)->Unit={
//        Toast.makeText(ApplicationUtils.getTopActivity(), it.errMsg, Toast.LENGTH_SHORT).show()
//    },showDialog: Boolean=false) {
//        viewModelScope.launch(Dispatchers.Main) {
//            if (showDialog) {
//                isShowLoading.emit(true)
//            }
//            safeApiCall(responseBlock, errorBlock)
//            if (showDialog) {
//                isShowLoading.emit(false)
//            }
//        }
//    }
//
//
//
//
//    suspend fun  safeApiCall(
//        responseBlock: suspend () -> Unit,
//        errorBlock:suspend (ApiException)->Unit,
//    ) {
//        try {
//             responseBlock()
//        } catch (e: Exception) {
//            e.printStackTrace()
//
//            val exception = ExceptionHandler.handleException(e)
//            LogUtils.e(exception.message)
//            errorBlock(exception)
//        }
//
//    }
//    // 回调接口方式
//    fun <T> launchUIWithResult(
//        responseBlock: suspend () -> BaseResponse<T>?,
//        successBlock: (T?) -> Unit,
//        errorCall:(ApiException)->Unit = {
//          Toast.makeText(ApplicationUtils.getTopActivity(), it.errMsg, Toast.LENGTH_SHORT).show()
//        },
//    ) {
//        viewModelScope.launch(Dispatchers.Main) {
//            val result = safeApiCallWithResult(responseBlock,errorCall)
//            successBlock(result)
//        }
//    }
//    suspend fun <T> safeApiCallWithResult(
//        responseBlock: suspend () -> BaseResponse<T>?,
//        errorCall: (ApiException)->Unit = {},
//    ): T? {
//        try {
//            val response = withContext(Dispatchers.IO) {
//                    responseBlock()
//            } ?: return null
//
//            if (response.isFailed) {
//                throw ApiException(response.errorCode, response.errorMsg)
//            }
//            return response.data
//        } catch (e: Exception) {
//            e.printStackTrace()
//            val exception = ExceptionHandler.handleException(e)
//            LogUtils.e(exception.message)
//            errorCall(exception)
//        }
//        return null
//    }
//
//
//    fun showToast(message:String){
//        Toast.makeText(ApplicationUtils.getTopActivity(), message, Toast.LENGTH_SHORT).show()
//    }
//
//}